package com.singfan.common.db;

import com.singfan.common.SingFanException;

import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

/**
 * 应用配置数据库访问接口
 * Author: HanSongHe
 * Date: 15-7-14 下午4:37
 */
public class AppConfigDao extends DaoBase {
    private static AppConfigDao instance = new AppConfigDao();
    private AppConfigDao(){

    }

    /**
     * 获取游戏配置数据接口
     * @return 游戏配置数据接口
     */
    public static AppConfigDao getInstance(){
        return instance;
    }

    /**
     * 获取一个实体bean对象列表
     * @param tClass 实体bean对象的class信息
     * @param <T> 实体bean对象的类型
     * @return 实体bean对象列表
     */
    public <T> List<T> selectAll(final Class<T> tClass) {
        final String sql = "SELECT * FROM " + DbUtil.className2TableName(tClass);

        Object obj = executeQuery(null, sql, null, new IResultSetReader(){
            @Override
            public List<T> readObject(ResultSet resultSet){
                try {
                    List<T> result = new ArrayList<>();
                    while(resultSet.next()){
                        T t = tClass.newInstance();
                        DbUtil.fillBean(t, resultSet);
                        result.add(t);
                    }
                    return result;
                }
                catch (Exception ex){
                    throw new SingFanException(String.format("AppConfigDao.selectAll().readObject() error: %1$s sql(%2$s)", ex.getMessage(), sql), ex);
                }
            }
        });

        return (List<T>)obj;
    }

    @Override
    protected String getDatabaseId(Object hashKey) {
        return DbContext.getDbConfigProvider().getConfigDatabaseId();
    }
}
